/*
* 1.实现方法rotate(arr, k),第一个参数为数组，第二个参数为非负数，将数组向右移动k步。
示例:
输入: [-1,-100,3,99], k = 2。输出: [3,99,-1,-100]
* */

// function rotate(arr, k) {
//   let newArr = [...arr];
//   k = k % newArr.length;
//   for (let i = 0; i < k; i++) {
//     // 取出后边的最后一个元素
//     newArr.unshift(newArr.pop());
//   }
//   return newArr;
// }


function rotate(arr, k) {
  let newArr = [...arr];
  k = k % newArr.length;
  // for (let i = 0; i < k; i++) {
  //   // 取出后边的最后一个元素
  //   newArr.unshift(newArr.pop());
  // }
  // O(1)
  //slice : 不会影响原来的数组
  //splice : 会影响
  newArr.unshift(...newArr.splice(newArr.length - k));
  return newArr;
}


let arr = [-1, -100, 3, 99];
let k = 3;
console.log(rotate(arr, k));


/*
* 2.给定一个字符串str,返回字符串中字母顺序最大的而且同时在字符串中出现大写和小写的字母。如果不存在这样的
  字母，返回‘~'。
  示例:
  输入: "aAbBcD",输出: 'B', 解释:因为c和D没有大小写同时出现，A和B都有大小写，但是B比A大，所以返回B。
  输入: "LooGVSSPbR":输出: 'n'
* */

function getMaxChar(str) {
  // 1. 取出大写小写字母都存在的字母
  //    1.1 正则 : aAbBcC  ABD abc  str abc
  //    1.2 反过来
  // 2. 得到最大的 charCodeAt()

  let reg = new RegExp(/[a-z]/g);
  let arrStr = [...new Set(str.match(reg))];
  // 大写规则
  // 最大字母的ASSII码
  let maxCode = 0;
  // 最大的字母
  let maxChar = '';
  for (let i = 0; i < arrStr.length; i++) {
    // 对比原字符串有没有对应的大写字母
    // 得到最大的大写字母
    let charCode = arrStr[i].toUpperCase();
    if (str.includes(charCode)) {
      // 得到最大的字母
      if (maxCode < charCode.charCodeAt()) {
        // 得到字母的ASSII码
        maxCode = charCode.charCodeAt();
        maxChar = charCode
      }
    }
  }
  if (!maxChar) {
    return '~'
  }
  return maxChar;

}

console.log(getMaxChar('aBccdJZKyYasddz'));


/*
* 3.实现一个方法，将JSON对象中所有值为空字符串的字段去掉
实例:
*let obj={a:1,tmp1:"",b:{c:{tmp2:"",d:"string"},tmp3:"",e:{}}}
输出: {"a":1,"b" :{"c":{"d":"string"},"e":{}}}
* */
let obj = {a: 1, tmp1: "", b: {c: {tmp2: "", d: "string"}, tmp3: "", e: {}}}

// 参数 是什么类型 如果是基本类型 : 栈 不用管  引用类型 : 堆 : 会影响原来的对象
// reducers
function removeEmptyStr(obj) {
  let newObj = JSON.parse(JSON.stringify(obj));
  for (let item in newObj) {
    if (typeof newObj[item] === 'object') {
      newObj[item] = removeEmptyStr(newObj[item]);
    } else {
      if (newObj[item] === '') {
        delete newObj[item]
      }
    }
  }
  return newObj;
}

console.log(removeEmptyStr(obj));
console.log(obj);
